/**
 * @file   simulation.hpp
 * @author Kimmo Luoma <kimmo@PHOTON3>
 * @date   Wed Sep 12 15:34:28 2012
 * 
 * @brief  Class for running a simulation. 
 *
 * Common parameters for all 
 * simulations are total time T, time-step dt and ensemble size M. 
 *
 * Possible algorithms are NMQJ,THS and DHS. 
 * 
 * Standard output is
 * \f$ \rho_{ij}(t),\, Var(\rho_{ij}(t))\f$ 
 *
 */
#ifndef SIMULATION_HPP
#define SIMULATION_HPP

//enum alg_type {NMQJ,DHS,THS};

template<typename alg> class simulation {
  //protected:
  // double T_;
  // double dt_;
  // int M_;
public:
  void deterministic_step(){
    static_cast<alg*>(this)->det_evol();
  }
  void stochastic_step(){
    static_cast<alg*>(this)->jumps();
  }
  void print_results(){
    static_cast<alg*>(this)->print_res();
  }
  void print_perf(){
    static_cast<alg*>(this)->runtime();
  }
    
};

#endif
